package 集合.双列集合;

import java.util.*;
import java.util.function.BiConsumer;

public class hashMapDemo2 {
    public static void main(String[] args) {
        /*
        Map集合案例：统计投票的人数
        某班级80名学生，需要组成秋游活动，班长提供了4个景点(A,B,C,D)，
        每个学生只能选择一个景点，请统计最终去哪个景点的人数最多。

        思路：
        1.利用随机数模拟投票结果
        2.将投票结果用集合存储（Arraylist），并用map集合进行统计
        即判断集合中是否包含该景点，不包含，表示一次出现；包含，表示出现过了，那么次数就加一
        3.判断是否有和最大值相同的景点（两个景点票数相同）表示出来
         */
//        1.先投票，定义数组存储四个景点
        String[]arr={"A","B","C","D"};
//        2，利用随机数模拟80个同学的投票，并把投票的结果存储出来(利用ArrayList存储数据)
        ArrayList<String> list=new ArrayList<>();
//       随机模拟学生投票
        Random r=new Random();
        for (int i = 0; i < 80; i++) {
            int index = r.nextInt(arr.length);
            list.add(arr[index]);
        }
//        System.out.println(list);
//        3.如果要统计的数据较多，不用计数器思想，可以用map集合，利用集合进行统计
        HashMap<String,Integer> hm=new HashMap<>();
        for(String name:list){
            if (hm.containsKey(name)){
//                如果集合中存在
//                先获取投票次数
                int count=hm.get(name);
//                自增一次
                count++;
//                将原来的数据覆盖
                hm.put(name,count);
            }else {
//                不存在，添加一次
                hm.put(name,1);
            }
        }
//        遍历map集合
        System.out.println(hm);

        hm.forEach(new BiConsumer<String, Integer>() {
            @Override
            public void accept(String s, Integer integer) {
                System.out.println(s+"="+integer);
            }
        });
//         求最大值
//       在此定义最大值不能使用景点的票数(景点得票数会为不确定值（0）)
        System.out.println("--------------------最大值---------------------------");
        int max=0;
        Set<Map.Entry<String, Integer>> entries = hm.entrySet();
        for (Map.Entry<String, Integer>entry:entries){
//            获取键值（票数）
            Integer value = entry.getValue();
            if (value>max){
                max=value;
            }
        }
//        System.out.println(max);

//        判断是否有着和最大值相同的票数（再遍历一次）
        for (Map.Entry<String, Integer>entry:entries){
//            获取键值（票数）
            Integer value = entry.getValue();
            if (value==max){
//                获得景点的名称
                System.out.println(entry.getKey()+"="+max);
            }
        }
    }
}
